package gui.tables;


import java.awt.BorderLayout;
import java.io.IOException;
import java.util.List;
import java.util.Map.Entry;
import java.util.SortedMap;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import org.jdom.JDOMException;
import xml.XMLRecipeReader;

/**
 * Tabelle fuer Suchpanel
 * @author Dennis Oeguetveren
 */
public class SearchTable extends JTableHeaderSimple {
	/** alle Spaltennamen der Tabelle */
	private static Object[] colNames = {"Name","Kategorien","Bewertung", "ID"};
	
	/**
	 * Konstruiert eine Tabelle fuer die Rezeptsuche des Suchpanels
	 */
	public SearchTable() {
		super(colNames);
		dtm = new DefaultTableModel(data, columnNames) {
			private static final long serialVersionUID = 1L;

			@Override public boolean isCellEditable(int row, int col) {
		        if (col >= 0) return false;
		        return true;
		    }
		};
		table = new JTable(dtm);
		
        table.getColumnModel().getColumn(0).setPreferredWidth(260);
        table.getColumnModel().getColumn(1).setPreferredWidth(230);
        table.getColumnModel().removeColumn(table.getColumnModel().getColumn(3));	//ID-Spalte ausblenden
	}
	/**
	 * Erstellt das Panel 
	 */
	@Override public JPanel buildPanel() {
		JScrollPane sp = new JScrollPane(table);
	    table.getColumnModel().getColumn(2).setCellRenderer(new RatingCellRenderer());
	    JPanel p = new JPanel(new BorderLayout());
	    p.add(sp);
	    return p;
	}
	
	/**
	 * Schreibt den Tabelleninhalt auf Basis einer XML mit Rezept-Inhalten neu
	 * und berücksichtigt dabei einen zu suchenden String
	 * @param xml	XML-Reader zum Auslesen von Rezepten
	 * @param name 	gesuchter String
	 * @return 'true' wenn erfolgreich, 'false' wenn fehlgeschlagen (XML leer oder Suchname leer)
	 * @throws IOException 
	 * @throws JDOMException 
	 */
	public boolean updateFromXML(XMLRecipeReader xml, String name) throws JDOMException, IOException {
		//Zwischenspeicher fuer XML-Inhalte
		Object[] data = new Object[4];
		SortedMap<String,List<String>>content = xml.convertToTable();
		//Abbruch wenn XML leer
		if (content.isEmpty())	return false;
		//alten Tabelleninhalt loeschen
		dtm.setRowCount(0);
		//Abbruch wenn Suchname leer
		if (name.isEmpty())	return false;
		//Ueber SortedMap iterieren und Datensaetze in Tabelle schreiben
		for (Entry<String, List<String>> entry : content.entrySet()) {
            System.out.println(entry.getKey().regionMatches(true, 0, name, 0, name.length()));
            if(entry.getKey().regionMatches(true, 0, name, 0, name.length())){
            	data[0] = entry.getKey();
    			data[1] = entry.getValue().get(0);
    			data[2] = entry.getValue().get(1);
    			data[3] = entry.getValue().get(2);
    			
    			dtm.addRow(data);
            }
		}
		content.clear();	//Liste loeschen
		
		return true;
	}
}
